package com.bird.thread.base.uncaughtexception;

import java.util.concurrent.TimeUnit;

/**
 * @author sijunqiang
 * @data 2021/7/3 14:18
 * @description: 验证：使用传统的try catch进行捕获异常是无法捕获子线程的异常。
 * 原因：try catch 只能捕获代码块里面的异常。而子线程抛出的异常是在run方法里面抛出的是不能捕获到的。
 */
public class CantCatchDirectly implements Runnable {

    public static void main(String[] args) {
        Thread thread = new Thread(new CantCatchDirectly(),"main");

        try {
            new Thread(new CantCatchDirectly(), "thread-1").start();
            TimeUnit.SECONDS.sleep(1);

//            int a = 2 / 0;
            new Thread(new CantCatchDirectly(), "thread-2").start();
            TimeUnit.SECONDS.sleep(2);

            new Thread(new CantCatchDirectly(), "thread-3").start();
            TimeUnit.SECONDS.sleep(3);

            new Thread(new CantCatchDirectly(), "thread-4").start();

            TimeUnit.SECONDS.sleep(4);
        } catch (InterruptedException e) {
            System.out.println("caught exception!");
        }

    }

    @Override
    public void run() {
        throw new RuntimeException();
    }
}

/*
 * try catch 只能捕获对应线程内容的异常,也就是说只能捕获 代码块里面的异常。而上面是run方法抛出的异常 不在代码块里面的异常 所有无法捕获。
 * */